# -*- coding: utf-8 -*-
# @Time    : 2021/3/29 21:50
# @Author  : tanxin
# @Email   : 1275841988@qq.com
# @File    : 2-29.py
# @Software: PyCharm


#字典练习
# company = {"BOSS":"唐僧","CTO":"悟空","CFO":"八戒","搬砖":"沙僧","苦力":"白龙马"}
# print(company.get("CTO"))
# print(company.get("BOSS"))
# for key,value  in company.items():
#      print(f"{key}是{value}")
#
# dic = input("请输入:")
# print(company.keys())
# if "悟空" in company.values():
#     print("在company中")
# elif  "白骨精" in company.values():
#     print("在company中")
# else:
#     print("失败")


#报名系统
# people ={"戴军":{"爱好":"唱歌","家庭住址":"娄底"},"谭欣":{"爱好":"追剧","家庭住址":"衡阳"}}
# print("欢迎进入报名系统!".center(50,"*"))
# usrname = input("请输入用户名:")
# passwd = input("请输入用户密码:")
# if usrname == "root"  and  int(passwd) == 123456:
#      print("登录成功")
#      num = input("按1查看报名详情，按2进入报名，按3退出报名系统".center(50,"#"))
# while 1 :
#     if int(num)==1:
#         print("报名信息为:")
#         for i,j in people.items():
#             print(f"{i}:{j}")
#         num = input("按1查看报名详情，按2进入报名，按3退出报名系统".center(50,"$"))
#     if int(num)==2:
#         print("进入报名:")
#         name1 = input("请输入你的名字:")
#         interests1= input("请输入你的兴趣爱好:")
#         address1 = input("请输入你的家庭地址:")
#         print("报名成功")
#         num = input("按1查看报名详情，按2进入报名，按3退出报名系统".center(50,"%"))
#     if int(num)==3:
#         print("退出系统")
#         break

#用python 实现/tmp/abc目录下，以jpg  jpeng  gif  peng结尾的文件各有多少个



#了解python字典的实现原理？
#1.python字典及其特性
#字典是Python的一种可变、无序容器数据结构，它的元素以键值对的形式存在，键值唯一，它的特点搜索速度很快：数据量增加10000倍，搜索时间增加不到2倍；当数据量很大的时候，字典的搜索速度要比列表快成百上千倍
#2、哈希表
#字典的底层实现就是哈希表
#3.Python字典如何运用哈希表
#插入：
#对键进行哈希和取余运算，得到一个哈希表的索引，如果该索引所对应的表地址空间为空，将键值对存入该地址空间；
#更新：
#对键进行哈希和取余运算，得到一个哈希表的索引，如果该索引所对应的地址空间中健与要更新的健一致，那么就更新该健所对应的值；
#查询：
#对要查找的健进行哈希和取余运算，得到一个哈希表的索引，如果该索引所对应的地址空间中健与要查询的健一致，那么就将该键值对取出来；
#扩容：
#字典初始化的时候，会对应初始化一个有k个空间的表，等空间不够用的时候，系统就会自动扩容，这时候会对已经存在的键值对重新进行哈希取余运算（重新进行插入操作）保存到其它位置；
#碰撞：
#有时候对于不同的键，经过哈希取余运算之后，得到的索引值一样，这时候怎么办？这时采用公开寻址的方式，运用固定的模式将键值对插入到其它的地址空间，比如线性寻址：如果第i个位置已经被使用，我们就看看第i+1个，第i+2个，第i+3个有没有被使用…直到找到一个空间或者对空间进行扩容。
#解决碰撞的办法
#1 开放地址法   2 再hash法  3链地址法

#农大好声音大赛
# print("欢迎进入报名系统!".center(50,"*"))
# usrname = input("请输入用户名:")
# passwd = input("请输入用户密码:")
# num=0
# if usrname == "root"  and  int(passwd) == 123456:
#       print("登录成功")
#       print("进入报名系统".center(50,"#"))
# while True:
#         print("进入报名:")
#         name = input("请输入你的名字:")
#         if name =="quit":
#             print("退出")
#             break
#         interests= input("请输入你的兴趣爱好:")
#         num +=1
#         print("报名成功")
#         print(f"你的名字是:{name},你的兴趣爱好是:{interests},你的序号是:{num}")
# print("报名人数为:",num)

#送礼物
Giftin={"谭欣":"apple","熊雪":"card","李璐":"doll","文老师":"flower","夏思毅":"fruit"}
Giftout={}
persons = list(Giftin.keys())
for i in persons:
    flag=0   #标记自己带来的礼物是否还未分配出去
    if  i in Giftin:
        flag=1
        myGift=Giftin.pop(i)  #如果自己带的礼物还未分配出去则去掉
    getGift=Giftin.popitem()   #随机返回并移除一对key-value值
    Giftout[i]=getGift[1]   #得到的礼物
    if flag:
        Giftin[i]=myGift  #将自己的礼物添加到未分配的礼物中
for key,value  in Giftout.items():
      print(f"{key}的礼物是{value}")



